package com.tjs.lucky.infrastructure.mapper;

import com.tjs.lucky.domain.activity.model.vo.AlterStateVO;
import com.tjs.lucky.infrastructure.po.Activity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author TJS
 * @Description
 * @create 2023/5/12 0:40
 */
@Mapper
public interface IActivityMapper {

    /**
     * 根据活动号查询活动信息
     *
     * @param activityId 活动号
     * @return 活动信息
     */
    Activity queryActivityByActivityId(Long activityId);

    /**
     * 根据活动号查询活动采取的策略
     *
     * @param activityId 活动号
     * @return 活动信息
     */
    Long queryStrategyIdByActivityId(Long activityId);

    /**
     * 插入数据
     *
     * @param activity 入参
     */
    boolean insert(Activity activity);

    /**
     * 变更活动状态       使用了乐观锁CAS 解决并非问题
     *
     * @param alterStateVO [activityId、beforeState、afterState]
     * @return 更新数量
     */
    @Update("   UPDATE activity" +
            "        SET state = #{afterState}" +
            "        WHERE activity_id = #{activityId} AND state = #{beforeState}")
    int alterState(AlterStateVO alterStateVO);

    /**
     * 更新
     * @param activity
     * @return
     */
    boolean update(Activity activity);


    /**
     * 扣减活动库存
     *
     * @param activityId 活动ID
     * @return 更新数量
     */
    @Update("UPDATE activity SET stock_surplus_count = stock_surplus_count - 1" +
            "        WHERE activity_id = #{activityId} AND stock_surplus_count > 0")
    int subtractionActivityStock(Long activityId);

    /**
     * 扫描待处理的活动列表，状态为：通过、活动中
     *
     * @param id ID
     * @return 待处理的活动集合
     */
    List<Activity> scanToDoActivityList(Long id);
}
